package com.lwf.thymeleafdemo1.redisTest.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.lwf.thymeleafdemo1.mysqlTest.dao.PsnInfoBDAO;
import com.lwf.thymeleafdemo1.mysqlTest.entity.PsnInfoBDTO;
import com.lwf.thymeleafdemo1.mysqlTest.entity.PsnInfoBVO;
import com.lwf.thymeleafdemo1.redisTest.service.PsnInfoService1;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

/**
 * @version v1.0
 * @Description:java练习
 * @Author 李文峰
 * @Date 2023/7/23 0023 10:37
 */
@Service("psnInfoService1")
public class PsnInfoService1Impl implements PsnInfoService1 {
    @Resource
    private PsnInfoBDAO psnInfoBDAO;

    @Override
    public IPage<PsnInfoBVO> findAll(Page page, PsnInfoBDTO param) {
        IPage<PsnInfoBVO> psnInfoBVOIPage = psnInfoBDAO.queryByPage(page, param);
        return psnInfoBVOIPage;
    }

    @Override
    // @Cacheable将查询结果进行缓存
    // key的定义：
    // T()里面写一个类型，表示当作一个类处理，后面调用该类方法
    //  如果是字符串，需要使用单引号
    // 如果要使用方法中的参数，需要在变量名前面加上#
    @Cacheable(cacheNames = "myRedis", key = "T(com.lwf.utils.MD5Utils).encode('PsnInfoService_findById' + #psnNo)")
    public PsnInfoBVO findById(String psnNo) {
        System.out.println("进入方法，去数据库查询");
        return psnInfoBDAO.queryById(psnNo);
    }

    @Override
    public void save(PsnInfoBDTO PsnInfoBDTO) {
        psnInfoBDAO.insert(PsnInfoBDTO);
    }

    @Override
    // @CachePut将返回值作为数据替换掉原来的缓存数据
    @CachePut(cacheNames = "myRedis", key = "T(com.lwf.utils.MD5Utils).encode('PsnInfoService_findById' + #psnInfo.psnNo)")
    public PsnInfoBDTO update(PsnInfoBDTO psnInfoBDTO) {
        psnInfoBDTO.setUpdtTime(new Date());
        psnInfoBDAO.update(psnInfoBDTO);
        return psnInfoBDTO;
    }

    @Override
    // @CacheEvict删除缓存
    @CacheEvict(cacheNames = "myRedis", key = "T(com.lwf.utils.MD5Utils).encode('PsnInfoService_findById' + #psnNo)")
    public void delete(String psnNo) {
        psnInfoBDAO.deleteById(psnNo);
    }
}

